﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {

        static void Main(string[] args)
        {
            //编写一个程序，用以接收用户输入的两个浮点型的数值，一个值表示用户想要存放在银行账户中的余额，
            //另一个值表示用户想要从银行账户中提取的金额。
            //实现存取款功能，
            //用户功能选择：1、存款，2、取款
            //取款时：
            //当用户想要提取的金额大于余额时，请手动抛出一个ArgumentOutOfRangeException 参数超出范围的异常，
            //异常信息可以写“取款金额大于余额，请重新输入”
            //，如此以确保取款金额始终不大于当前余额。
            //操作结束，打印输出余额是多少。
            //最后再添加catch一般异常 Exception，使得数据类型转换的异常也能被捕获到。

            float money = 0;
            while (true)
            {
                Console.WriteLine("请用户选择功能：1、存款，2、取款，3、退出");
                string k = Console.ReadLine();
                switch (k)
                {
                    case "存款":

                        float cun = 0;
                        
                        try
                        {
                            Console.WriteLine("请输入存款金额：");
                            cun = float.Parse(Console.ReadLine());
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine("异常");
                            Console.WriteLine(e.Message);
                            Console.WriteLine(e.Source);
                            Console.WriteLine(e.StackTrace);
                            throw;
                        }
                        finally
                        {
                            money = money + cun;
                            Console.WriteLine($"卡内余额为：{money}");
                        }
                        break;
                    case "取款":

                        float qu = 0;

                        try
                        {
                            Console.WriteLine("请输入取款金额：");
                            qu = float.Parse(Console.ReadLine());
                            if (money < qu)
                            {
                                throw new ArgumentOutOfRangeException();
                            }
                            else
                            {
                                money = money - qu;
                            }
                        }
                        catch (ArgumentNullException a)
                        {
                            Console.WriteLine("异常信息：");
                            Console.WriteLine("取款金额大于余额，请重新输入");
                            Console.WriteLine(a.Message);
                            Console.WriteLine(a.Source);
                            Console.WriteLine(a.StackTrace);
                            
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine("发现异常");
                            Console.WriteLine(e.Message);
                            Console.WriteLine(e.Source);
                            Console.WriteLine(e.StackTrace);
                            throw;
                        }
                        finally
                        {
                            Console.WriteLine($"卡内余额为：{money}");
                        }
                        break;
                    case "退出":
                        Console.WriteLine("已退出！");
                        break;
                    default:
                        Console.WriteLine("输入的形式不正确！");
                        break;
                }
            Console.ReadKey();
            }
        }
    }
}